<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>绘制线段</title>
	<link rel = "stylesheet" href="../css/common.css" />
	<style type="text/css">
		.option{
			position: fixed;
			top: 20px;
			right: 20px;
			color: #FFF;
		}
	</style>
</head>
<body>
	<canvas id="canvas"></canvas>
	<div class="option">
	<input type ="radio" name ="line_type" checked="true" id="LINES" value="LINES"/><label for="LINES">基本线段</label>
	<input type ="radio" name ="line_type" id="LINE_STRIP" value="LINE_STRIP"/><label for="LINE_STRIP">带状线段</label>
	<input type ="radio" name ="line_type" id="LINE_LOOP" value="LINE_LOOP"/><label for="LINE_LOOP">闭合线段</label>
	</div>
	<script type="shader-source" id="vertexShader">
		//浮点数设置为中等精度
		precision mediump float;
		//接收 JavaScript 传递过来的点的坐标（X, Y）
		attribute vec2 a_Position;
		// 接收canvas的尺寸。
		attribute vec2 a_Screen_Size;
		void main(){
			// 将 canvas 的坐标值 转换为 [-1.0, 1.0]的范围。
			vec2 position = (a_Position / a_Screen_Size) * 2.0 - 1.0;
			// canvas的 Y 轴坐标方向和 设备坐标系的相反。
			position = position * vec2(1.0, -1.0);
			// 最终的顶点坐标。
			gl_Position = vec4(position, 0.0, 1.0);
			gl_PointSize = 5.0;

		}
	</script>
	<script type="shader-source" id="fragmentShader">
		//浮点数设置为中等精度
		precision mediump float;
		//全局变量，用来接收 JavaScript传递过来的颜色。
		uniform vec4 u_Color;

		void main(){
			// 将颜色处理成 GLSL 允许的范围[0， 1]。
			vec4 color = u_Color / vec4(255, 255, 255, 1);
			// 点的最终颜色。
			gl_FragColor = color;
		}
	</script>
	<script src="../utils/webgl-helper.js"></script>
	<script>
		let currentType = 'LINES';
		//获取canvas
		let canvas = getCanvas('#canvas');
		//设置canvas尺寸为满屏
		resizeCanvas(canvas);
		//获取绘图上下文
		let gl = getContext(canvas);
		//创建着色器程序
		let program = createSimpleProgramFromScript(gl, 'vertexShader', 'fragmentShader');

		//使用该着色器程序
		gl.useProgram(program);

		// 随机生成一个颜色。
		let color = randomColor();
		// 找到着色器中的全局变量 u_Color;
		let u_Color = gl.getUniformLocation(program, 'u_Color');
		// 将随机颜色传递给给全局变量
		gl.uniform4f(u_Color, color.r, color.g, color.b, color.a);
		// 获取 canvas 尺寸。
		let a_Screen_Size = gl.getAttribLocation(program, 'a_Screen_Size');
		// 将 canvas 尺寸传递给顶点着色器。
		gl.vertexAttrib2f(a_Screen_Size, canvas.width, canvas.height);

		let positions = [];

		let a_Position = gl.getAttribLocation(program, 'a_Position');
		
		gl.enableVertexAttribArray(a_Position);

		let buffer = gl.createBuffer();
		gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
		gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
		
		
		//设置清屏颜色为黑色。
		gl.clearColor(0, 0, 0, 1);

		canvas.addEventListener("click", e=>{
			positions.push(e.pageX, e.pageY);

			if(positions.length  > 0) {
				gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
				gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);
				
				render(gl);
			}
		})
		$$('[name="line_type"]').forEach(function(item){
			item.addEventListener('input',function(){
				positions = [];
				currentType = this.value;
				render(gl);
			})
		})

		/*渲染*/
		function render(gl){
			gl.clear(gl.COLOR_BUFFER_BIT);
			if(positions.length > 0){
				gl.drawArrays(gl[currentType], 0, positions.length / 2);
			}
		}
		render(gl);
	</script>
</body>
</html>